#include <iostream>
#include "hs_logger.h"

int main(int argc, char* argv[])
{
    /* 更多 hs_logger 接口详见 doc/hs_logger.md */

    // 启动时间前缀
    HS_LOG_ENABLE_TIME_PREFIX(true);
    
    // 使用完整的日志级别前缀
    // HS_LOG_ENABLE_SIMPLE_LEVEL_PREFIX(false);

    // 设置日志文件
    HS_LOG_OPEN_FILE("../../../test/logger/test.log"); 

    // 这是info日志
    LOG_INFO("This is a INFO (You can turn off its output by using `HS_LOG_ENABLE_INFO`).\n");

    // 只在debug模式输出
    LOG_DEBUG("Visible only in debug mode\n");
    
    // 这是warn日志
    LOG_WARN("This is a warning!\n");

    // 这是error日志, 程序不会中断
    LOG_ERROR("This is an error but the program will continue to run.\n");

    // 这是fatal日志，程序会中断，请谨慎使用
    // LOG_FATAL("This is a fatal ERROR!\n");

    // 拼接输出 
    int sum = 0;
    LOG_BUFFER_BEGIN
    LOG_BUFFER("Use the `LOG_BUFFER` to support concatenated multiple output:\n");
    for (int i = 0; i < 4; ++i) {
        sum += i;
        LOG_BUFFER("Iteration (" $ (i + 1) $ "): " $ sum  $ std::endl);
    }
    LOG_BUFFER_END

    // 浮点数精度设置
    double val = 123.123456789;
    LOG_INFO("val = " $ val $ std::endl);
    // 使用 std::fixed 和 std::setprecision(6) 临时设置浮点数显示精度
    LOG_INFO("USE std::setprecision: " $ std::fixed $ std::setprecision(6) $ val $ std::endl );
    LOG_INFO("val = " $ val $ std::endl);
    // 全局设置
    HS_LOG_SET_PRECISION(6);
    LOG_INFO("val = " $ val $ std::endl);

    return 0;
}

